package cn.ztelovecly.springboot.framework.util;


import cn.ztelovecly.springboot.framework.constant.ConfigPropertiesConst;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class SettingUtil {

    private static Map<String,String> propertiesMap = new HashMap<>();

    /**
     * 读取指定配置文件里的指定属性(未指定文件时，默认为setting.properties)
     * @param filePath 文件名
     * @param propName 属性名
     * @return 格式化后的字符串
     */
    public static String getProperty(String filePath, String propName){
        if(filePath == null || "".equals(filePath)){
            filePath = "setting.properties";
        }

        String propValue = propertiesMap.get(propName);
        if(propValue!=null && !propValue.equals("")){
            return propValue;
        }

        Properties prop = new Properties();
        InputStream in = getCaller(3).getResourceAsStream("/" + filePath);

        try {
            prop.load(in);
            propValue = prop.getProperty(propName).trim();
            propValue = new String(propValue.getBytes("ISO-8859-1"),"gbk");
        } catch (Exception e) {
            return getProperty(propName);
        }
        return propValue;
    }

    public static String getProperty(String propName){
        String filePath = "config.properties";

        String propValue = propertiesMap.get(propName);
        if(propValue!=null && !propValue.equals("")){
            return propValue;
        }

        Properties prop = new Properties();
        InputStream in = getCaller(4).getResourceAsStream("/" + filePath);
        try {
            prop.load(in);
            propValue = prop.getProperty(propName).trim();
            propValue = new String(propValue.getBytes("ISO-8859-1"),"gbk");
        } catch (Exception e) {
            return propValue;
        }
        return propValue;
    }

    /**
     * 获取www的域名
     * @return      域名
     */
    public static String getWwwSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_WWW_URL);
    }

    /**
     * 获取erp的域名
     * @return      域名
     */
    public static String getErpSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_ERP_URL);
    }

    /**
     * 获取进销存的域名
     * @return      域名
     */
    public static String getDistributionSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_DISTRIBUTION_URL);
    }

    /**
     * 获取财务的域名
     * @return      域名
     */
    public static String getFinancialSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_FINANCIAL_URL);
    }

    /**
     * 获取市场的域名
     * @return      域名
     */
    public static String getMarketplaceSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_MARKETPLACE_URL);
    }

    /**
     * 获取后台的域名
     * @return      域名
     */
    public static String getBackendSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_BACKEND_URL);
    }

    /**
     * 获取www的域名
     * @return      域名
     */
    public static String getEmployeeSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_EMPLOYEE_URL);
    }

    /**
     * 获取www的域名
     * @return      域名
     */
    public static String getMySiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_MY_URL);
    }

    /**
     * 获取www的域名
     * @return      域名
     */
    public static String getAuthSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_AUTH_URL);
    }

    /**
     * 获取www的域名
     * @return      域名
     */
    public static String getServiceSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_SERVICE_URL);
    }

    /**
     * 获取member的域名
     * @return      域名
     */
    public static String getMemberSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_MEMBER_URL);
    }

    /**
     * 获取Open的域名
     * @return      域名
     */
    public static String getOpenSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_OPEN_URL);
    }

    /**
     * 获取Open的域名
     * @return      域名
     */
    public static String getCustomerSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_CUSTOMER_URL);
    }

    /**
     * 获取Relationship的域名
     * @return      域名
     */
    public static String getRelationshipSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_RELATIONSHIP_URL);
    }

    /**
     * 获取Collaboration的域名
     * @return      域名
     */
    public static String getCollaborationSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_COLLABORATION_URL);
    }
    /**
     * 获取POS_WEB的域名
     * @return      域名
     */
    public static String getPosUrl() {
        return getProperty(ConfigPropertiesConst.SITE_POS_URL);
    }

    /**
     *
     * @return
     */
    public static String getSupplierSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_SUPPLIER_URL);
    }

    /**
     * 获取虎丘电商的域名
     * @return
     */
    public static String getTigerHillSiteUrl() {
        return getProperty(ConfigPropertiesConst.SITE_TIGERHILL_URL);
    }

    /**
     * 获取CDN的域名
     * @return
     */
    public static String getCdnUrl() {
        return getProperty(ConfigPropertiesConst.SITE_CDN_URL);
    }

    /**
     *
     * @return
     */
    public static String getDeployMode() {
        // 后端
        String deployMode = getProperty("",ConfigPropertiesConst.DEPLOY_MODE);
        if(deployMode!=null && !deployMode.equals("")){
            return deployMode;
        }
        // 前端
        deployMode = getProperty(ConfigPropertiesConst.DEPLOY_MODE);
        return deployMode;
    }
    /**
     *
     * @return
     */
    public static String getVerifyMode() {
        return getProperty(ConfigPropertiesConst.VERIFY_MODE);
    }
    /**
     *
     * @return
     */
    public static String getFlumeHost() {
        // 后端
        String flumeHost = getProperty("",ConfigPropertiesConst.FLUME_HOST);
        if(flumeHost!=null && !flumeHost.equals("")){
            return flumeHost;
        }
        // 前端
        flumeHost = getProperty(ConfigPropertiesConst.FLUME_HOST);
        return flumeHost;
    }
    /**
     *
     * @return
     */
    public static String getFlumePort() {
        // 后端
        String flumePort = getProperty("",ConfigPropertiesConst.FLUME_PORT);
        if(flumePort!=null && !flumePort.equals("")){
            return flumePort;
        }
        // 前端
        flumePort = getProperty(ConfigPropertiesConst.FLUME_PORT);
        return flumePort;
    }
    /**
     *
     * @return
     */
    public static String getModuleName() {
        // 后端
        String moduleName = getProperty("",ConfigPropertiesConst.MODULE_NAME);
        if(moduleName!=null && !moduleName.equals("")){
            return moduleName;
        }
        // 前端
        moduleName = getProperty(ConfigPropertiesConst.MODULE_NAME);
        return moduleName;
    }
    /**
     *
     * @return
     */
    public static String getVersion() {
        return getProperty(ConfigPropertiesConst.VERSION);
    }


    /**
     * 使用线程堆栈信息获取方法的调用者类名
     * @return 调用者类名
     */
    public static Class getCaller(int level){
        StackTraceElement stack[] = Thread.currentThread().getStackTrace();
        Class clazz;
        try {
            String name = stack[level].getClassName();
            clazz = Class.forName(name);
        }catch(Exception ex){
            ex.printStackTrace();
            clazz = Object.class;
        }
        return clazz;
    }
}
